package main

import (
	"github.com/gin-gonic/gin"
	"log"
	"time"
)

// 在中间件中使用Goroutine
// 当在中间件或 handler 中启动新的 Goroutine 时，不能使用原始的上下文，必须使用只读副本

func main() {

	r := gin.Default()
	r.GET("/test_mg01", func(c *gin.Context) {
		// 拷贝一份副本在Goroutine中使用
		tmp := c.Copy()
		go func() {
			time.Sleep(5 * time.Second)
			// 此处使用的是拷贝的上下文副本
			log.Println("test_mg01已经执行完毕，路径为：" + tmp.Request.URL.Path)
		}()
	})

	r.GET("/test_mg02", func(c *gin.Context) {
		time.Sleep(5 * time.Second)
		// 没有使用Goroutine，不需要拷贝上下文
		log.Println("test_mg02已经执行完毕，路径是：" + c.Request.URL.Path)
	})

	r.Run()
}
